using System.Collections.Generic;
using CSI.Directory.Core.Model;

namespace CSI.Directory.Core.Services
{
    public interface IDirectoryService
    {
        IList<Category> GetAllCategories();
        IList<Listing> GetListingsByCategory(int id);
        Category GetCategoryByName(string name);
        IList<Category> GetSubCategoriesForCategory(int i);
        
        //IList<Listing> GetListingsForManager();
        TransactionResult AddCategory(string name, int parent, string alias);
        Category GetParentCategoryByName(string name);
        TransactionResult DeleteCategory(int id);
        TransactionResult FeatureListing(ListingCategory listingCategory);
        IList<ListingCategory> GetFeaturedListingCategories();
        TransactionResult RemoveFeature(ListingCategory listingCategory);
        IList<Listing> GetAllListings();
        IList<Listing> SearchDirectory(string query, int category, int county);
        IList<Listing> GetFeaturedListings();
        Category GetParentCategoryById(int id);

        TransactionResult AddListing(int userid, string contact, string title, string email, string url, string phone,
            string address, string address2,string city, string state, string zipcode, 
            string description, string keywords,string category1, string category2, 
            string category3, string category4,string category5,string category6, 
            string category7, string category8, string category9,string category10,
            string county1, string county2, string county3, string county4, string county5);
        
        IList<County> GetAllCounties();
        /* Changes made by venkat*/
        /* Articles Methods Start Here*/
        TransactionResult AddArticle(Article article);
        TransactionResult EditArticle(int id, string name, string body, string menuid, string featured, string desc, string keywords);
        Article GetArticlesById(int id);
        TransactionResult DeleteArticle(int id);
        /* Articles Methods Ends Here*/

        /* Menu Methods Start Here*/
        Menu GetMenusById(int menuId);
        IList<Menu> GetAllMenus();
        TransactionResult AddMenu(Menu menu);
        TransactionResult EditMenu(Menu menu);
        TransactionResult DeleteMenu(int id);
        /* Menu Methods Ends Here*/
        IList<Listing> GetListingsByCounty(int id);
        County GetCountyById(int id);
        IList<Article> GetArticlesForMenuByTitle(string title);
        IList<Article> GetAllArticles();
        IList<Article> GetArticlesByMenuId(int id);
        TransactionResult AddFreeListing(int userid, string title, string contact, string phone, string category1, string county1);
        TransactionResult AddArticle(string article, string body, string menuid, string featured, string desc, string keywords);

        Listing GetListingById(int id);
        TransactionResult EditListing(int id, string contact, string title, string email, string url, string phone, string address, string address2, string city, string state, string zipcode, string description, string keywords);

        IList<Menu> GetMenuByName(string name);
        TransactionResult DeleteListing(int id);
        IList<ListingCategory> GetListingCategoriesByListingId(int id);
        IList<ListingCounty> GetListingCountiesByListingId(int id);

        TransactionResult EditAssociations(int id, string category0, string category1, string category2,
                                           string category3, string category4, string category5, string category6,
                                           string category7, string category8, string category9, string category10,
                                           string county0, string county1, string county2, string county3,
                                           string county4);
        IList<Listing> GetListingsByUserId(int id);
        Listing GetListingByUserId(int id);
        TransactionResult ActivateListingForUser(int id);
        County GetCountyByName(string name);
    }
}